{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * triage base 1 val"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/vetting_base_1_run_1/1/AstroCNNModelVetting_base_20210830_145433',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_1/2/AstroCNNModelVetting_base_20210830_150259',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_1/3/AstroCNNModelVetting_base_20210830_151121',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_1/4/AstroCNNModelVetting_base_20210830_151941',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_1/5/AstroCNNModelVetting_base_20210830_152810',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_1/6/AstroCNNModelVetting_base_20210830_153633',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_1/7/AstroCNNModelVetting_base_20210830_154456',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_1/8/AstroCNNModelVetting_base_20210830_155317',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_1/9/AstroCNNModelVetting_base_20210830_160140',\n",
       " '/mnt/tess/astronet/checkpoints/vetting_base_1_run_1/10/AstroCNNModelVetting_base_20210830_161012']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/vetting_base_1_run_1'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-vetting-1-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-vetting-v1-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 2\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 3\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 4\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 5\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 6\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 7\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 8\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 9\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n",
      "Running model 10\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "231 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_p', 'disp_e', 'disp_n']\n",
    "\n",
    "col_p = labels.index('disp_p')\n",
    "thresh = config.hparams.prediction_threshold\n",
    "thresh = 0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[col_p] >= thresh:\n",
    "            agg_preds[tic_id].append('disp_p')\n",
    "        else:\n",
    "            masked_v = [v if i != col_p else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.6842105263157895\n",
      "Precision: 0.30952380952380953\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_p_p'] > 0)\n",
    "pos = (pl['disp_p'] > 0)\n",
    "\n",
    "pneg = (pl['disp_p_p'] == 0)\n",
    "neg = (pl['disp_p'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "29984131\n",
      "91576611\n",
      "375506058\n",
      "395171208\n",
      "127722285\n",
      "357719182\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "119774374\n",
      "169446708\n",
      "24491836\n",
      "261562118\n",
      "276936320\n",
      "278866211\n",
      "280095254\n",
      "304729846\n",
      "340058744\n",
      "344978642\n",
      "384068226\n",
      "384744828\n",
      "400734328\n",
      "424876542\n",
      "61802871\n",
      "142963071\n",
      "14413057\n",
      "76698127\n",
      "365494323\n",
      "388076435\n",
      "420115946\n",
      "149854222\n",
      "250475499\n",
      "321828403\n",
      "332146607\n",
      "202444594\n",
      "255994336\n",
      "1715469662\n",
      "1715469667\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_p</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>0.030557</td>\n",
       "      <td>0.968880</td>\n",
       "      <td>0.009353</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>0.017666</td>\n",
       "      <td>0.980558</td>\n",
       "      <td>0.005988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>0.484252</td>\n",
       "      <td>0.509948</td>\n",
       "      <td>0.025529</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>0.194997</td>\n",
       "      <td>0.794854</td>\n",
       "      <td>0.018242</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>0.293658</td>\n",
       "      <td>0.677563</td>\n",
       "      <td>0.023100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>0.124014</td>\n",
       "      <td>0.871360</td>\n",
       "      <td>0.011816</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>0.303825</td>\n",
       "      <td>0.679316</td>\n",
       "      <td>0.023832</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>0.391553</td>\n",
       "      <td>0.608515</td>\n",
       "      <td>0.026201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>0.195003</td>\n",
       "      <td>0.795725</td>\n",
       "      <td>0.016452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278866211</th>\n",
       "      <td>0.600728</td>\n",
       "      <td>0.374367</td>\n",
       "      <td>0.048651</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             disp_p    disp_e    disp_n\n",
       "tic_id                                 \n",
       "278866211  0.030557  0.968880  0.009353\n",
       "278866211  0.017666  0.980558  0.005988\n",
       "278866211  0.484252  0.509948  0.025529\n",
       "278866211  0.194997  0.794854  0.018242\n",
       "278866211  0.293658  0.677563  0.023100\n",
       "278866211  0.124014  0.871360  0.011816\n",
       "278866211  0.303825  0.679316  0.023832\n",
       "278866211  0.391553  0.608515  0.026201\n",
       "278866211  0.195003  0.795725  0.016452\n",
       "278866211  0.600728  0.374367  0.048651"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 278866211)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_p_p</th>\n",
       "      <th>disp_e_p</th>\n",
       "      <th>disp_n_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_p</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>375506058</th>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           disp_p_p  disp_e_p  disp_n_p  maxcount  disp_p  disp_e  disp_n\n",
       "tic_id                                                                   \n",
       "375506058         0        10         0        10       1       0       0"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 375506058]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_ps = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_p = row[0], row[1][col_p]\n",
    "        pred_ps[i][tic_index[tic]] = pred_p\n",
    "\n",
    "lbl_ps = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_p = row[0], row[1]['disp_p']\n",
    "    if tic in tic_index:\n",
    "        lbl_ps[tic_index[tic]] = (lbl_p > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = float(np.sum(lbl_ps))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_ps >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_ps\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.4112126056131386, max R: 1.0, max P: 1.0\n",
      "100% recall at: 17%, threshold: 0.13845039844517015\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_ps)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    if p > 0:\n",
    "        ps.append(p)\n",
    "        rs.append(r)\n",
    "    else:\n",
    "        ps.append(1.0)\n",
    "        rs.append(0.0)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
